package com.general.framework.example.abstractFactory;

public class Main {
    public static void main(String[] args) {
        JavaCourseFactory javaCourseFactory = new JavaCourseFactory();
        javaCourseFactory.createNote().edit();
        javaCourseFactory.createVideo().record();

        PythonCourseFactory pythonCourseFactory = new PythonCourseFactory();
        pythonCourseFactory.createNote().edit();
        pythonCourseFactory.createVideo().record();
        /**
         * 上面的代码完整地描述了两个产品族：Java课程和Python课程，也描述了两个产品等级视频和笔记。
         * 抽象工厂模式非常完美清晰地描述了这样一层复杂的关系。
         * 但是，不知道大家有没有发现，如果我们再继续扩展产品等级，将源码Source也加入课程，
         * 那么我们的代码从抽象工厂到具体工厂要全部调整，很显然不符合开闭原则。
         * 由此可知抽象工厂模式也是有缺点的：
         * (1)规定了所有可能被创建的产品集合，产品族中扩展新的产品困难，需要修改抽象工厂的接口。
         * (2)增加了系统的抽象性和理解难度。
         */
    }
}
